/*
 * ATTENTION: The "eval" devtool has been used (maybe by default in mode: "development").
 * This devtool is neither made for production nor for readable output files.
 * It uses "eval()" calls to create a separate source file in the browser devtools.
 * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
 * or disable the default devtool with "devtool: false".
 * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
 */
/******/ (() => { // webpackBootstrap
/******/ 	"use strict";
/******/ 	var __webpack_modules__ = ({

/***/ "./src/server/koa.js":
/*!***************************!*\
  !*** ./src/server/koa.js ***!
  \***************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _koa_middleware__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./koa/middleware */ \"./src/server/koa/middleware.js\");\n/* harmony import */ var _koa_router__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./koa/router */ \"./src/server/koa/router.js\");\n// 本文件作为koa练习，demo文件\n// 1、http 缓存策略：\n// 1.1、html 协商性缓存\n// 1.2、js、css、img 强缓存，时间不宜过长\n// 2、api 接口合并方案\n// 3、koa 路由\n// 4、http2、https 如何配置\n// 5、oauth2、单点登录流程实例\n// 核心模块\nvar Koa = __webpack_require__(/*! koa */ \"koa\");\n\n\n // 1、新建一个 koa 实例\n\nvar app = new Koa(); // 2、使用 context(注意：不要和router同时使用)\n// app.use(async (ctx) => {\n//     // 3、调用 nodejs 原生的请求响应数据\n//     // ctx.req\n//     // ctx.res\n//     // 4、接受请求数据：\n//     console.log(\"request:\", ctx.request)\n//     // 5、设置响应数据，以下三种写法均可：https://koa.bootcss.com/#response\n//     // ctx.response.body = html.replace(\"${body}\", JSON.stringify(ctx.request))\n//     // ctx.body = \"Koa Response2\" \n//     // response.body = \"Koa Response3\"\n// })\n// // 3、中间件、洋葱模型测试\n// useMiddleware(app)\n// // 4、路由相关(注意：不要和app.use响应同时使用)\n// useRouter(app)\n// 5.1、错误处理，try-catch\n\napp.use(function (ctx) {\n  try {\n    JSON.parse(\"'name': '1123sf'\");\n    ctx.body = \"ok\"; // 最外层捕获了异常事件，就不会走到error事件里面来；如果相同时使用需要在try-catch中加入emit('error')方法\n    // ctx.app.emit('error', err, ctx)\n  } catch (err) {\n    // （1）手动返回错误信息\n    // ctx.response.status = 500\n    // ctx.body = \"服务器内部错误！\" + err.message\n    // （2）使用内置方法抛出错误\n    // ctx.throw(500)\n    ctx[\"throw\"](404);\n  }\n}); // // 5.2、错误处理，大范围捕获错误（放到最顶部，最外层；这里只是示例）\n// // （1）可以将try-catch放到最外层的中间件app.use，next()放到try里面；这样可以捕获所有错误；\n// // （2）注意next()下一个中间件如果是异步的，name需要await next()\n// app.use(async (ctx, next) => {\n//     try{\n//         await next()\n//     }catch (err){\n//         ctx.throw(404)\n//     }\n// })\n// 5.3、使用error事件监听全局错误处理：\n// （1）可以捕获异步异常\n// （2）最外层捕获了异常事件，就不会走到error事件里面来；如果相同时使用需要在try-catch中加入emit('error')方法\n\napp.on('error', function (error) {\n  console.log('app error：', error);\n});\napp.listen(3000, function () {\n  console.log(\"http://localhost:3000\");\n});\n\n//# sourceURL=webpack://ssr-mobx/./src/server/koa.js?");

/***/ }),

/***/ "./src/server/koa/middleware.js":
/*!**************************************!*\
  !*** ./src/server/koa/middleware.js ***!
  \**************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.object.to-string.js */ \"core-js/modules/es.object.to-string.js\");\n/* harmony import */ var core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var core_js_modules_es_promise_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.promise.js */ \"core-js/modules/es.promise.js\");\n/* harmony import */ var core_js_modules_es_promise_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_promise_js__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var regenerator_runtime_runtime_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! regenerator-runtime/runtime.js */ \"regenerator-runtime/runtime.js\");\n/* harmony import */ var regenerator_runtime_runtime_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(regenerator_runtime_runtime_js__WEBPACK_IMPORTED_MODULE_2__);\n\n\n\n\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\n\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\n\nvar util = __webpack_require__(/*! util */ \"util\");\n\nvar fs = __webpack_require__(/*! fs */ \"fs\");\n\nvar path = __webpack_require__(/*! path */ \"path\");\n\nvar compose = __webpack_require__(/*! koa-compose */ \"koa-compose\");\n\nfunction useMiddleware(app) {\n  // // 1、同步中间件、洋葱模型测试\n  // const one = (cxt, next) => {\n  //     console.log(\"start one\")\n  //     next()\n  //     console.log(\"end one\")\n  // }\n  // const two = (cxt, next) => {\n  //     console.log(\"start two\")\n  //     next()\n  //     console.log(\"end two\")\n  // }\n  // const three = (cxt, next) => {\n  //     console.log(\"start three\")\n  //     next()\n  //     console.log(\"end three\")\n  // }\n  // // app.use(one)\n  // // app.use(two)\n  // // app.use(three)\n  // // 2、合并中间件\n  // app.use(compose([one, two, three]))\n  // 3、异步中间件，使用 async\n  app.use( /*#__PURE__*/function () {\n    var _ref = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee(ctx, next) {\n      var filePath, data;\n      return regeneratorRuntime.wrap(function _callee$(_context) {\n        while (1) {\n          switch (_context.prev = _context.next) {\n            case 0:\n              filePath = path.resolve(__dirname, \"../public/index.html\"); // 3.1、指定编码格式：'utf-8'，就会直接渲染而不是下载文件\n\n              _context.next = 3;\n              return util.promisify(fs.readFile)(filePath, 'utf-8');\n\n            case 3:\n              data = _context.sent;\n              // 3.2、指定type为：html，也可以渲染页面而不是下载\n              ctx.type = \"html\";\n              ctx.body = data;\n              next();\n\n            case 7:\n            case \"end\":\n              return _context.stop();\n          }\n        }\n      }, _callee);\n    }));\n\n    return function (_x, _x2) {\n      return _ref.apply(this, arguments);\n    };\n  }());\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (useMiddleware);\n\n//# sourceURL=webpack://ssr-mobx/./src/server/koa/middleware.js?");

/***/ }),

/***/ "./src/server/koa/router.js":
/*!**********************************!*\
  !*** ./src/server/koa/router.js ***!
  \**********************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var core_js_modules_es_regexp_exec_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.regexp.exec.js */ \"core-js/modules/es.regexp.exec.js\");\n/* harmony import */ var core_js_modules_es_regexp_exec_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_exec_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var core_js_modules_es_string_replace_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.string.replace.js */ \"core-js/modules/es.string.replace.js\");\n/* harmony import */ var core_js_modules_es_string_replace_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_replace_js__WEBPACK_IMPORTED_MODULE_1__);\n\n\n\n// 路由相关\nvar Router = __webpack_require__(/*! @koa/router */ \"@koa/router\");\n\nvar Static = __webpack_require__(/*! koa-static */ \"koa-static\");\n\nvar path = __webpack_require__(/*! path */ \"path\");\n\nvar mount = __webpack_require__(/*! koa-mount */ \"koa-mount\"); // 返回一个模板页面\n\n\nvar html = \"<!DOCTYPE html>\" + \"<html lang=\\\"en\\\">\" + \"    <head>\" + \"        <meta charset=\\\"UTF-8\\\">\" + \"        <meta http-equiv=\\\"X-UA-Compatible\\\" content=\\\"IE=edge\\\">\" + \"        <meta name=\\\"viewport\\\" content=\\\"width=device-width, initial-scale=1.0\\\">\" + \"        <title>Document</title>\" + // `     <script src=\"/common.js\"></script>`+\n\"        <script src=\\\"/public/common.js\\\"></script>\" + \"    </head>\" + \"    <body>\" + \"        ${body}\" + \"    </body>\" + \"</html>\";\n\nvar renderPage = function renderPage(content) {\n  if (typeof content !== \"string\") {\n    return html.replace(\"${body}\", JSON.stringify(content));\n  }\n\n  return html.replace(\"${body}\", content);\n};\n\nfunction useRouter(app) {\n  // 1、静态资源托管：最好不用相对路径，受启动命令行路径影响\n  var publicPath = path.resolve(__dirname, \"../public\");\n  console.log(\"publicPath:\", publicPath);\n  app.use( // 可选插件：mount 插件给静态资源添加虚拟路径\n  mount('/public', Static(publicPath)) // Static(path.resolve(__dirname, \"../public\"))\n  ); // 2、koa 路由：https://github.com/koajs/router/blob/HEAD/API.md\n\n  var router = new Router();\n  router.get(\"/\", function (ctx, next) {\n    ctx.body = renderPage(ctx.request);\n  }); // 2.1、ctx.params 获取动态路径参数\n\n  router.get(\"/page/:id\", function (ctx, next) {\n    ctx.body = renderPage(ctx.params);\n  }); // 2.2、路由重定向：针对同步请求！【遗留问题】怎么理解？\n\n  router.get(\"/redirect\", function (ctx, next) {\n    ctx.redirect('/');\n  }); // 2.3、注册路由\n\n  app.use(router.routes()).use(router.allowedMethods());\n} // module.exports = useRouter\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (useRouter);\n\n//# sourceURL=webpack://ssr-mobx/./src/server/koa/router.js?");

/***/ }),

/***/ "@koa/router":
/*!******************************!*\
  !*** external "@koa/router" ***!
  \******************************/
/***/ ((module) => {

module.exports = require("@koa/router");

/***/ }),

/***/ "core-js/modules/es.object.to-string.js":
/*!*********************************************************!*\
  !*** external "core-js/modules/es.object.to-string.js" ***!
  \*********************************************************/
/***/ ((module) => {

module.exports = require("core-js/modules/es.object.to-string.js");

/***/ }),

/***/ "core-js/modules/es.promise.js":
/*!************************************************!*\
  !*** external "core-js/modules/es.promise.js" ***!
  \************************************************/
/***/ ((module) => {

module.exports = require("core-js/modules/es.promise.js");

/***/ }),

/***/ "core-js/modules/es.regexp.exec.js":
/*!****************************************************!*\
  !*** external "core-js/modules/es.regexp.exec.js" ***!
  \****************************************************/
/***/ ((module) => {

module.exports = require("core-js/modules/es.regexp.exec.js");

/***/ }),

/***/ "core-js/modules/es.string.replace.js":
/*!*******************************************************!*\
  !*** external "core-js/modules/es.string.replace.js" ***!
  \*******************************************************/
/***/ ((module) => {

module.exports = require("core-js/modules/es.string.replace.js");

/***/ }),

/***/ "fs":
/*!*********************!*\
  !*** external "fs" ***!
  \*********************/
/***/ ((module) => {

module.exports = require("fs");

/***/ }),

/***/ "koa":
/*!**********************!*\
  !*** external "koa" ***!
  \**********************/
/***/ ((module) => {

module.exports = require("koa");

/***/ }),

/***/ "koa-compose":
/*!******************************!*\
  !*** external "koa-compose" ***!
  \******************************/
/***/ ((module) => {

module.exports = require("koa-compose");

/***/ }),

/***/ "koa-mount":
/*!****************************!*\
  !*** external "koa-mount" ***!
  \****************************/
/***/ ((module) => {

module.exports = require("koa-mount");

/***/ }),

/***/ "koa-static":
/*!*****************************!*\
  !*** external "koa-static" ***!
  \*****************************/
/***/ ((module) => {

module.exports = require("koa-static");

/***/ }),

/***/ "path":
/*!***********************!*\
  !*** external "path" ***!
  \***********************/
/***/ ((module) => {

module.exports = require("path");

/***/ }),

/***/ "regenerator-runtime/runtime.js":
/*!*************************************************!*\
  !*** external "regenerator-runtime/runtime.js" ***!
  \*************************************************/
/***/ ((module) => {

module.exports = require("regenerator-runtime/runtime.js");

/***/ }),

/***/ "util":
/*!***********************!*\
  !*** external "util" ***!
  \***********************/
/***/ ((module) => {

module.exports = require("util");

/***/ })

/******/ 	});
/************************************************************************/
/******/ 	// The module cache
/******/ 	var __webpack_module_cache__ = {};
/******/ 	
/******/ 	// The require function
/******/ 	function __webpack_require__(moduleId) {
/******/ 		// Check if module is in cache
/******/ 		var cachedModule = __webpack_module_cache__[moduleId];
/******/ 		if (cachedModule !== undefined) {
/******/ 			return cachedModule.exports;
/******/ 		}
/******/ 		// Create a new module (and put it into the cache)
/******/ 		var module = __webpack_module_cache__[moduleId] = {
/******/ 			// no module.id needed
/******/ 			// no module.loaded needed
/******/ 			exports: {}
/******/ 		};
/******/ 	
/******/ 		// Execute the module function
/******/ 		__webpack_modules__[moduleId](module, module.exports, __webpack_require__);
/******/ 	
/******/ 		// Return the exports of the module
/******/ 		return module.exports;
/******/ 	}
/******/ 	
/************************************************************************/
/******/ 	/* webpack/runtime/compat get default export */
/******/ 	(() => {
/******/ 		// getDefaultExport function for compatibility with non-harmony modules
/******/ 		__webpack_require__.n = (module) => {
/******/ 			var getter = module && module.__esModule ?
/******/ 				() => (module['default']) :
/******/ 				() => (module);
/******/ 			__webpack_require__.d(getter, { a: getter });
/******/ 			return getter;
/******/ 		};
/******/ 	})();
/******/ 	
/******/ 	/* webpack/runtime/define property getters */
/******/ 	(() => {
/******/ 		// define getter functions for harmony exports
/******/ 		__webpack_require__.d = (exports, definition) => {
/******/ 			for(var key in definition) {
/******/ 				if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
/******/ 					Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
/******/ 				}
/******/ 			}
/******/ 		};
/******/ 	})();
/******/ 	
/******/ 	/* webpack/runtime/hasOwnProperty shorthand */
/******/ 	(() => {
/******/ 		__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
/******/ 	})();
/******/ 	
/******/ 	/* webpack/runtime/make namespace object */
/******/ 	(() => {
/******/ 		// define __esModule on exports
/******/ 		__webpack_require__.r = (exports) => {
/******/ 			if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
/******/ 				Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
/******/ 			}
/******/ 			Object.defineProperty(exports, '__esModule', { value: true });
/******/ 		};
/******/ 	})();
/******/ 	
/************************************************************************/
/******/ 	
/******/ 	// startup
/******/ 	// Load entry module and return exports
/******/ 	// This entry module can't be inlined because the eval devtool is used.
/******/ 	var __webpack_exports__ = __webpack_require__("./src/server/koa.js");
/******/ 	
/******/ })()
;